靜態、類別、實例方法(method)/變數


靜態

  • 不需要instance便可以使用
  • 可以不帶裝飾器,呼叫都是使用class存取
  • 無法存取類別或實例屬性

    class cls1():
      a = 1
      @staticmethod
      def output():
          print("I have decorator")
    
      def output2():
          print("I don't have decorator")
    # usage
    cls1.output()
    cls1.output2()
    

類別

  • 不需要instance便可以使用
  • 類別變數是所有類別共用,可以用class 或 instance 存取
  • 如果不帶裝飾器,在使用時須要把類別作為參數傳入

    class cls1():
      a = 1
      @classmethod
      def output(cls):
          print("I have decorator")
          print(cls.a)
    
      def output_without_decorator(cls):
          print("I don't have decorator")
    # usage
    cls1.output()
    cls1.output_without_decorator(cls1)
    print(cls1.a) # 1
    inst = cls1()
    print(inst.a) # 1
    

實例

  • 實例方法需要傳入self(即instance),其名稱是可以自定義的
  • 可以建立與類別變數名稱相同的實例變數,這並不影響類別屬性
  • Instance在找變數時會先依續尋找: instance 屬性> class屬性
class cls1():
    a = 1
    def output(self):
        print(self.a)
        self.a = 2
        print("I have decorator")
        print(self.a)

# usage
inst = cls1()
inst.output() # 1, I have decorator, 2
print(inst.a) # 2
print(cls1.a) # 1







你可能感興趣的文章

383. Ransom Note

383. Ransom Note

瀏覽器的事件傳遞機制

瀏覽器的事件傳遞機制

Laravel x Vue Conf TW 2021

Laravel x Vue Conf TW 2021






留言討論